//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息
// 文件名称: uart.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-07-21) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>

#include "config.h"
extern bit busy;
//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
//<<AICUBE_USER_INCLUDE_END>>

//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
//<<AICUBE_USER_GLOBAL_DEFINE_END>>

////////////////////////////////////////
// 串口2初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART2_Init(void)
{
#ifdef BAUDRATE
#undef BAUDRATE
#endif
#define BAUDRATE (9600)
#define T2_RELOAD (65536 - (SYSCLK / BAUDRATE + 2) / 4)

    UART2_SwitchP1011(); // 设置串口数据端口: RxD2 (P1.0), TxD2 (P1.1)

    //  UART2_Timer2BRT();                  //串口2固定选择定时器2作为波特率发生器
    TIMER2_TimerMode();            // 设置定时器2为定时模式
    TIMER2_1TMode();               // 设置定时器2为1T模式
    TIMER2_SetPrescale(0);         // 设置定时器2的8位预分频
    TIMER2_SetReload16(T2_RELOAD); // 设置定时器2的16位重载值
    TIMER2_Run();                  // 定时器2开始运行

    UART2_EnableRx();        // 使能串口2接收数据
    UART2_Mode1();           // 设置串口2为模式1 (8位数据可变波特率)
    UART2_SetIntPriority(0); // 设置中断为最低优先级
    UART2_EnableInt();       // 使能串口2中断
    busy = 0;
    //<<AICUBE_USER_UART2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_UART2_INITIAL_END>>
}

////////////////////////////////////////
// 串口2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void UART2_ISR(void) interrupt UART2_VECTOR
{
    //<<AICUBE_USER_UART2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    if (UART2_CheckTxFlag()) // 判断串口发送中断
    {

        UART2_ClearTxFlag(); // 清除串口发送中断标志
        busy = 0;
    }

    if (UART2_CheckRxFlag()) // 判断串口接收中断
    {
        UART2_ClearRxFlag(); // 清除串口接收中断标志
    }
    //<<AICUBE_USER_UART2_ISR_CODE1_END>>
}
void uart2Send(char dat)
{
    while (busy)
        ;
    busy = 1;
    S2BUF = dat;
}
void uart2SendStr(char *p)
{
    while (*p)
    {
        uart2Send(*p);
        p++;
    }
}
//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
